#include <asm/pdb.h>
#include <xen/trace.h>
#include <xen/console.h>
+#include <xen/shadow.h>
#include <hypervisor-ifs/sched_ctl.h>
extern unsigned int alloc_new_dom_mem(struct task_struct *, unsigned int);
op->u.pcidev_access.enable);
}
break;
+
+ case DOM0_SHADOW_CONTROL:
+ {
+ struct task_struct *p;
+
+ p = find_domain_by_id( op->u.shadow_control.domain );
+ if ( p )
+ {
+ ret = shadow_mode_control(p, op->u.shadow_control.op );
+ put_task_struct(p);
+ }
+ }
+ break;
default:
ret = -ENOSYS;
********/
+int shadow_mode_control( struct task_struct *p, unsigned int op )
+{
+ if (p->mm.shadow_mode && op == DOM0_SHADOW_CONTROL_OP_OFF )
+ {
+ shadow_mode_disable(p);
+ }
+ else if (p->mm.shadow_mode && op == DOM0_SHADOW_CONTROL_OP_ENABLE_TEST )
+ {
+ shadow_mode_disable(p);
+ shadow_mode_enable(p, SHM_test);
+ }
+ else if (p->mm.shadow_mode && op == DOM0_SHADOW_CONTROL_OP_FLUSH )
+ {
+ //shadow_mode_flush(p);
+ }
+ else
+ {
+ return -EINVAL;
+ }
+
+ return 0;
+}
int shadow_mode_enable( struct task_struct *p, unsigned int mode )
{
int enable;
} dom0_pcidev_access_t;
+/*
+ * Control shadow pagetables operation
+ */
+#define DOM0_SHADOW_CONTROL 24
+
+#define DOM0_SHADOW_CONTROL_OP_OFF 0
+#define DOM0_SHADOW_CONTROL_OP_ENABLE_TEST 1
+#define DOM0_SHADOW_CONTROL_OP_FLUSH 10
+typedef struct dom0_shadow_control_st
+{
+ /* IN variables. */
+ domid_t domain;
+ int op;
+} dom0_shadow_control_t;
+
+
typedef struct dom0_op_st
{
unsigned long cmd;
dom0_gettbufs_t gettbufs;
dom0_physinfo_t physinfo;
dom0_pcidev_access_t pcidev_access;
+ dom0_shadow_control_t shadow_control;
} u;
} dom0_op_t;
#define shadow_linear_pg_table ((l1_pgentry_t *)SH_LINEAR_PT_VIRT_START)
#define shadow_linear_l2_table ((l2_pgentry_t *)(SH_LINEAR_PT_VIRT_START+(SH_LINEAR_PT_VIRT_START>>(L2_PAGETABLE_SHIFT-L1_PAGETABLE_SHIFT))))
+extern int shadow_mode_control( struct task_struct *p, unsigned int op );
extern pagetable_t shadow_mk_pagetable( struct task_struct *p,
unsigned long gptbase);
extern int shadow_fault( unsigned long va, long error_code );